package com.fh.common.system.log.service.impl;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.query.Criteria;
//import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fh.common.constant.Constant;
import com.fh.common.system.log.SpringDataPageable;
import com.fh.common.system.log.dao.SysLogDao;
import com.fh.common.system.log.service.SysLogMongoService;
import com.fh.common.util.ConvertUtils;
import com.fh.common.util.ReflectUtils;
import com.fh.modules.system.entity.SysLog;

import lombok.extern.slf4j.Slf4j;

/**
 * 
 * @author junqiu
 *
 */
//@Component
@Slf4j
public class SysLogMongoServiceImpl implements SysLogMongoService {

//	@Autowired
//	private SysLogDao sysLogDao;
//
//	@Autowired
//	private MongoTemplate template;
//
//	@Override
//	public SysLog getById(String id) {
//		return template.findById(id, SysLog.class);
//	}
//	@Override
//	public void removeById(String id) {
//		sysLogDao.deleteById(id);
//	}
//
//	@Override
//	public void saveLog(SysLog sysLog) {
//		template.save(sysLog);
////		sysLogDao.save(sysLog);
//	}
//
//	@Override
//	public IPage<SysLog> queryPage(SysLog sysLog,int page,int size,
//			String column,String order,String beginTime,String endTime,String keyWord) {
//		Query query = new Query();
//		Criteria criteria = new Criteria();
//
//		if(ConvertUtils.isNotEmpty(beginTime) && ConvertUtils.isNotEmpty(endTime)) {
//			criteria.and("createTime").gte(beginTime);
//			criteria.and("createTime").lte(endTime);
//		}
//
//		if(ConvertUtils.isNotEmpty(keyWord)) {
//			criteria.and("logContent").regex(".*?"+keyWord+".*");
//		}
//
//		Class classz=sysLog.getClass();
//		List<Field> fields=ReflectUtils.getClassAllFields(sysLog);
//		for (Field field : fields) {
//			try {
//				String fieldName=field.getName();
//				if("serialVersionUID".equals(fieldName)) {
//					continue;
//				}
//				field.setAccessible(true);
//				Object fieldValue=field.get(sysLog);
//				field.setAccessible(false);
//				System.out.println(fieldName+":"+fieldValue);
//
//				if(fieldValue!=null) {
//					criteria.and(fieldName).is(fieldValue);
//				}
//			} catch (Exception e) {
////				e.printStackTrace();
//				log.error(e.getMessage());
//			}
//		}
//
//		List<Order> orders = new ArrayList<Order>();
//		if(ConvertUtils.isNotEmpty(column) && ConvertUtils.isNotEmpty(order)) {
//			if(Constant.ORDER_ASC.equals(order)) {
//				orders.add(new Order(Direction.ASC, column));
//			}else {
//				orders.add(new Order(Direction.DESC, column));
//			}
//		}
//		Sort sort = new Sort(orders);
//
//		if (null != sort) {
//            query.with(sort);
//        }
//        query.addCriteria(criteria);
//
//        SpringDataPageable pageable = new SpringDataPageable();
//
//        pageable.setPagenumber(page);
//        pageable.setPagesize(size);
//        pageable.setSort(sort);
//        Long count =  template.count(query, SysLog.class);
//        List<SysLog> list = template.find(query.with(pageable), SysLog.class);
//
//        IPage<SysLog> pageList=new Page<SysLog>(page, size, count);
//        pageList.setRecords(list);
//
//        return pageList;
//	}
}
